/**
 *starMove(obj,Target)
 * @param obj 当前对象。
 * @param json 属性组
 * @param fun 传递一个函数
 * obj.times 对象定时器。
 */
function startMove(obj,json,fun){
    //避免每次调用函数时,多次开启定时器
    clearInterval(obj.times);
    //绑定定时器
    obj.times = setInterval(function(){
        //判断所有的属性运动都是否达到目标值
        var flag = true;
        //循环遍历对象中的属性
        for(var attr in json){
            //获取当前属性值
            var curr;
            //对透明度进行处理
            if(attr=='opacity'){
                curr = getStyle(obj,attr)*100;
            }else {
                curr = parseInt(getStyle(obj, attr));
            }
            //通过对速度的处理实现缓冲运动！
            var speed = (json[attr]-curr)/5;
            speed = speed>0?Math.ceil(speed):Math.floor(speed);
            //判断是否达到目标值
            if(curr != json[attr]){
                flag = false;
            }
            //处理透明度
            if(attr=='opacity'){

                //通过每次每次或当前值,累加实现运动
                obj.style.opacity =  (curr+speed)/100;
                //解决IE9以下的兼容性
                obj.style.filter = 'alpha(opacity:'+(curr+speed)+')';

            }else{
                //通过每次每次或当前值,累加固定值实现运动
                obj.style[attr] =  curr+speed+'px';
            }

        }

        // 达到目标值时停止定时器
        if(flag) {
            clearInterval(obj.times);
            if (fun) {
                fun();
            }
        }

    },30);

}

/**
 *  获取对象属性值
 * @param obj 当前对象
 * @param attr 属性名称
 * @returns {返回属性值}
 */
function   getStyle(obj,attr){

    if(obj.currentStyle){

        return  obj.currentStyle[attr];
    }else{

        return  getComputedStyle(obj,false)[attr];
    }


}